home *** CD-ROM | disk | FTP | other *** search
-
- { *********************************************************************** }
- { }
- { ExpBox V1.03 explodes a Box on the display using BGI routines. }
- { You define the final box area, how many steps in the explosion, }
- { the speed at which the explosion occurs, and where the explosion }
- { is to start at. You also define the color and pattern of the }
- { exploding box. You can optionally specifiy a rectangle to follow }
- { the exploding box to provide more action. The color of the rectangle }
- { can also be defined. }
- { Uses the TP graph unit and the CRT unit (only uses the Delay }
- { function from the CRT unit). If you don't use the CRT unit, then you }
- { might want to consider using the CRTI unit from the Borland TP4 }
- { library on CompuServe which allows you to remove unwanted functions. }
- { }
- { Originally written by Michael Day as 20 November 1988 }
- { Copyright 1988 by Michael Day }
- { This release (V1.03) as of 14 February 1989 }
- { Released to the public domain by author. }
- { }
- { *********************************************************************** }
- { History: }
- { V1.01 - Original release }
- { V1.02 - Removed excess unused code }
- { V1.03 - Adjusted number to match new release of SDI }
-
- unit ExpBox;
- interface
-
- uses graph,CRT;
-
- { *********************************************************************** }
- {-- External access definitions --}
- { *********************************************************************** }
-
- {-------------------------------------------------------------------------}
- {Explodes a box on the screen}
- {x1,y1,x2,y2=final box size, Step=explosion steps, }
- {Speed=delay in ms between explosions, Style=how to explode}
- {Color=box color, Pattern=background pattern, }
- {RColor=rectangle color (if used) }
-
- procedure ExplodeBox(x1,y1,x2,y2:integer;
- Speed,Step,Style:word;
- Color,Pattern,RColor:byte);
-
-
- { *********************************************************************** }
-
- implementation
-
-
- procedure ExpRect(x1,y1,x2,y2:integer; Style:word);
- var i,Rc,rx,ry,ix,iy:integer;
- begin
- bar(X1, Y1, X2, Y2);
- Rc := (style shr 5) and 7;
- if Rc > 0 then
- begin
- ix := ((x2-x1)shr 1)shr rc;
- iy := ((y2-y1)shr 1)shr rc;
- for i := Rc downto 1 do
- begin
- rx := ((x2-x1)shr(i))-ix;
- ry := ((y2-y1)shr(i))-iy;
- rectangle(succ(X1+rx), succ(Y1+ry), pred(X2-rx), pred(Y2-ry) );
- end;
- end;
- end;
-
- {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
- { misc special effects }
- {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
-
- {-------------------------------------------------------------------------}
- {Explodes a box on the screen}
-
- {Styles: 0=explode from center, 1=explode from top, 2=explode from bottom,}
- {3=explode from left, 4=explode from right, 5=explode from top left corner,}
- {6=explode bot left corner, 7=explode top right corner, }
- {8=explode from bottom right corner. 9 and Above = no explode.}
- {if Style bits 5,6,7 are set, then rectangles will be drawn while exploding.}
- {a Step value of 0 or 1 will not cause an explode, the value must be larger}
- {than 1 to get an explode to happen. Speed sets the delay in ms between}
- {explode steps. Color and Pattern set the exploding box color and pattern.}
- {RColor sets the rectangle color (when used). If Style bit 4 is on, then }
- {sound effects will also be added.}
-
- procedure ExplodeBox(x1,y1,x2,y2:integer;
- Speed,Step,Style:word;
- Color,Pattern,RColor:byte);
- var si,i,Sx,Sy : integer;
- begin
- if Step > 0 then
- begin
- if (Style and $10) = $10 then NoSound;
- Sx := (x2-x1) div Step;
- Sy := (y2-y1) div Step;
- SetFillStyle(Pattern,Color);
- setcolor(RColor);
- for i := pred(Step) downto 1 do
- begin
- case (Style and $f) of
- {center explode}
- 0: ExpRect(x1+((Sx*i)shr 1), y1+((Sy*i)shr 1),
- x2-((Sx*i)shr 1), y2-((Sy*i)shr 1), Style);
-
- {top explode}
- 1: ExpRect(x1, y1, x2, y2-(Sy*i), Style);
-
- {bot explode}
- 2: ExpRect(x1, y1+(Sy*i), x2, y2, Style);
-
- {left explode}
- 3: ExpRect(x1, y1, x2-(Sx*i), y2, Style);
-
- {right explode}
- 4: ExpRect(x1+(Sx*i), y1, x2, y2, Style);
-
- {top left explode}
- 5: ExpRect(x1, y1, x2-(Sx*i), y2-(Sy*i), Style);
-
- {bot left explode}
- 6: ExpRect(x1, y1+(Sy*i), x2-(Sx*i), y2, Style);
-
- {top right explode}
- 7: ExpRect(x1+(Sx*i), y1, x2, y2-(Sy*i), Style);
-
- {bot right explode}
- 8: ExpRect(x1+(Sx*i), y1+(Sy*i), x2, y2, Style);
-
- end; {case}
-
- if (Style and $10) = $10 then Sound(i shl 8);
- if (Style and $f) < 9 then delay(Speed);
- end;
- bar(x1,y1,x2,y2); {draw final box}
- if (Style and $10) = $10 then NoSound; {turn the sound off if was on}
- end;
- end;
-
-
- { *********************************************************************** }
-
- end.